home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / WINDOWS / LZAPI.ZIP / MS3D.ZIP / MS3D.PAS
Encoding:
Pascal/Delphi Source File  |  1996-09-06  |  2.4 KB  |  101 lines

  1. { ----------------------------------------------------------------
  2.  
  3.     Unit-Datei zur Benutzung der Microsoft CTL3D-DLL im Pascal-
  4.         Programm. Wenn sie nicht da ist, passiert halt nix.
  5.  
  6.     Dipl. Ing. Bernd Herd
  7.     Rudolf-Virchow-Str. 8
  8.     68642 Bⁿrstadt
  9.  
  10.  
  11.     Diese Include-Datei enthΣlt alle Definitionen, die Sie brauchen,
  12.         um die CTL3D.DLL bzw. CTL3DV2.DLL in Ihrem Anwendungsprogramm zu
  13.         verwenden.
  14.  
  15.         Ihr Programm lΣuft auch, wenn die DLL fehlt, dann eben ohne den
  16.         zusΣtzlichen Showeffekt.
  17.  
  18.         Binden Sie diese Unit mit
  19.  
  20.         Uses ms3d
  21.  
  22.         in Ihr Programm ein.
  23.  
  24.         Es wird nur die Grundfunktion zum automatischen Subclassen
  25.         unterstⁿtzt.
  26.  
  27.         - MessageBox wird grau
  28.         - Drucker-Einrichtungs-Dialogboxen werden grau usw.
  29.         - Sonstige DialogBoxen werden grau.
  30.  
  31.         Die CTL3D.DLL unterscheidet sich von der CTL3DV2.DLL in
  32.         einem wesentlichen Punkt: Sie mu▀ im Windows-System-
  33.         Verzeichnis stehen!
  34.  
  35.    ---------------------------------------------------------------- }
  36.  
  37. unit ms3d;
  38.  
  39. interface
  40.  
  41. uses OWindows, WinTypes, WinProcs, Win31, WinAPI;
  42.  
  43.  
  44.  
  45. implementation
  46.  
  47.  
  48. var NextExitProc : pointer;
  49.     hiCtl3d      : THandle;             { Handle der CTL3D.DLL }
  50.     ErrorMode    : Word;
  51.  
  52.     fnReg, fnAuto, fnUnreg : pointer;
  53.  
  54.  
  55. { Diese Routine wird beim Programmende automatisch ausgefⁿhrt }
  56. procedure ExitMs3dUnit; far;
  57. begin
  58.   ExitProc := NextExitProc;
  59.  
  60.      asm   Push HInstance
  61.            call fnUnReg
  62.      end;
  63.  
  64.   FreeLibrary(hiCtl3d);
  65. end;
  66.  
  67.  
  68.  
  69. { Initialisierungteil der Unit: Versuch, die CTL3D.DLL bzw. CTL3DV2.DLL zu laden }
  70. begin
  71.   ErrorMode := SetErrorMode( SEM_NOOPENFILEERRORBOX );
  72.  
  73.   hiCtl3d := LoadLibrary( 'CTL3DV2.DLL' );
  74.  
  75.   if (hiCtl3d < HINSTANCE_ERROR) then
  76.      hiCtl3d := LoadLibrary( 'CTL3D.DLL' );
  77.  
  78.   if (hiCtl3d >= HINSTANCE_ERROR) then Begin
  79.      fnReg  := GetProcAddress( hiCtl3d, 'Ctl3dRegister'     );
  80.      fnAuto := GetProcAddress( hiCtl3d, 'Ctl3dAutoSubclass' );
  81.      fnUnReg:= GetProcAddress( hiCtl3d, 'Ctl3dUnRegister'   );
  82.  
  83.      if (fnReg <> NIL) and
  84.         (fnAuto <> NIL)  and
  85.         (fnUnReg <> NIL) then Begin
  86.  
  87.          NextExitProc := ExitProc;
  88.          ExitProc     := @ExitMs3DUnit;
  89.  
  90.          asm   Push HInstance
  91.                call fnReg
  92.                Push HInstance
  93.                Call fnAuto
  94.          End;
  95.      End;
  96.   End;
  97.  
  98.   SetErrorMode( ErrorMode );
  99.  
  100. end.
  101.